package org.jeecg.modules.zhoupackage.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.zhoupackage.pojo.*;
import org.jeecg.modules.zhoupackage.pojo.myexcel.PengProductEntity;
import org.jeecg.modules.zhoupackage.service.ITeamOrderService;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 团订Controller
 *
 * @author zxl
 * @since 20201008
 */
@RestController
@RequestMapping("/teamOrder")
public class MyTeamOrderController {

    @Autowired
    ITeamOrderService service;

    /**
     * 团订里面定制款查看详细
     *
     * @param productId 产品ID
     */
    @RequestMapping("/getDetail")
    public JSONObject getDetail(String productId) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccProductInfo detail = service.getDetail(productId);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", detail);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订的产品列表
     *
     * @param token    令牌
     * @param pageNo   分页当前页
     * @param pageSize 页面大小
     */
    @RequestMapping("/getProList")
    public JSONObject getProList(String token, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
        JSONObject jsonObject = new JSONObject();
        try {
            IPage<MlccProductInfo> result = service.getProList(token, pageNo, pageSize);
            if (result == null) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "查询成功");
                jsonObject.put("data", result);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订的模板删除
     *
     * @param moudleSn
     * @return
     */
    @RequestMapping("/moduleDel")
    public JSONObject moduleDel(String moudleSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.moduleDel(moudleSn);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "删除成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "删除失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "删除失败");
        }
        return jsonObject;
    }

    /**
     * 团订的订单删除
     *
     * @param orderSn
     * @return
     */
    @RequestMapping("/OrderDel")
    public JSONObject OrderDel(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.OrderDel(orderSn);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "删除成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "删除失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "删除失败");
        }
        return jsonObject;
    }

    /**
     * 编辑团订模板
     *
     * @param moduleSn 团订模板编号
     */
    @RequestMapping("/updateModule")
    public JSONObject updateModule(String moduleSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccTeamModuleInfo moduleInfo = service.updateModule(moduleSn);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", moduleInfo);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 根据部门ID和订单编号查询产品列表
     *
     * @param departid
     * @param orderSn
     * @return
     */
    @RequestMapping("/getProduct")
    public JSONObject getProduct(String departid, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccProductInfo> productInfoList = service.getProduct(departid, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", productInfoList);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订界面尺码选择（查询标准尺码父级）
     *
     * @param categoryIds 选中产品的类别ID，多个用逗号隔开
     * @return
     */
    @RequestMapping("/sizeChose")
    public JSONObject sizeChose(String categoryIds) {
        JSONObject jsonObject = new JSONObject();
        try {
            Set<MlccStandardInfo> infoSet = service.sizeChose(categoryIds);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", infoSet);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 根据选中的标准尺寸查询可以微调的子选项（具体的身体尺寸）
     *
     * @param topid
     * @return
     */
    @RequestMapping("/getSizeButtons")
    public JSONObject getSizeButtons(String topid) {
        JSONObject jsonObject = new JSONObject();
        try {
            Map<String, List<MlccStandardInfo>> sizeButtons = service.getSizeButtons(topid);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", sizeButtons);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 获取自定义尺寸
     *
     * @param categoryids 选中的产品ID
     * @return
     */
    @RequestMapping("/getCustomSize")
    public JSONObject getCustomSize(String categoryids) {
        JSONObject jsonObject = new JSONObject();
        try {
            Set<MlccBodySizeInfo> customSize = service.getCustomSize(categoryids);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", customSize);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订订单预览
     *
     * @param orderSn 订单编号
     * @return
     */
    @RequestMapping("/previewOrder")
    public JSONObject previewOrder(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccTeamOrderInfo info = service.previewOrder(orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("msg", "查询成功");
            jsonObject.put("data", info);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订订单预览界面立即下单
     *
     * @param orderSn
     * @return
     */
    @RequestMapping("/orderNow")
    public JSONObject orderNow(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.orderNow(orderSn);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "下单成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "下单失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "下单失败");
        }
        return jsonObject;
    }

    /**
     * 前端——我的订单——团订返修，获取订单基本信息
     *
     * @param token   令牌
     * @param orderSn 订单编号
     * @return
     */
    @RequestMapping("/getBaseTeamOrderDetail")
    public JSONObject getBaseTeamOrderDetail(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccTeamOrderInfo orderInfo = service.getBaseTeamOrderDetail(token, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", orderInfo);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订返修根据小产品编号获取员工列表（实际获取单个员工）
     *
     * @param token        令牌
     * @param orderSn      订单编号
     * @param smallProCode 小产品编码
     * @return 人员数据
     */
    @RequestMapping("/getempList")
    public JSONObject getempList(String token, String orderSn, String smallProCode) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccCustomerInfo> list = service.getempList(token, orderSn, smallProCode);
            jsonObject.put("code", 0);
            jsonObject.put("data", list);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订获取产品返修尺寸列表
     *
     * @param token 令牌
     * @param code  小产品编码
     * @return 返修尺寸列表
     */
    @RequestMapping("/listAftersize")
    public JSONObject listAftersize(String token, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            Set<MlccCategoryFanxiuInfo> infoSet = service.listAftersize(token, code);
            jsonObject.put("code", 0);
            jsonObject.put("data", infoSet);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订小产品选择重做，查询真正的尺寸表
     *
     * @param token 令牌
     * @param code  小产品编码
     * @return 真正的客户量体尺寸列表
     */
    @RequestMapping("/listBodySize")
    public JSONObject listBodySize(String token, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccXiaoProductBodysize> infoSet = service.listBodySize(token, code);
            jsonObject.put("code", 0);
            jsonObject.put("data", infoSet);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 根据小产品编码获取小产品ID
     *
     * @param token 令牌
     * @param code  小产品代码
     * @return 小产品数据
     */
    @RequestMapping("/getSmallPro")
    public JSONObject getSmallPro(String token, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccCustomerProductInfo smallPro = service.getSmallPro(token, code);
            jsonObject.put("code", 0);
            jsonObject.put("data", smallPro);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 团订新增返修数据（小产品尺寸表添加返修尺寸数据）
     *
     * @param fanxiu 返修的所有数据
     */
    @RequestMapping("/saveAfter")
    public JSONObject saveAfter(@RequestBody Map fanxiu) {
        JSONObject jsonObject = new JSONObject();
        Object fanxiu1 = fanxiu.get("fanxiu"); // 获取尺寸列表
        List<MlccCategoryFanxiuInfo> infos = JSON.parseArray(JSON.toJSONString(fanxiu1), MlccCategoryFanxiuInfo.class);
        // 获取面料列表
        Object fabric = fanxiu.get("fabric");
        List<MlccFabricInfo> fabricList = JSON.parseArray(JSON.toJSONString(fabric), MlccFabricInfo.class);
        try {
            int result = service.saveAfter(fanxiu.get("token").toString(), fanxiu.get("code").toString(), fanxiu.get("afterCode").toString(), fanxiu.get("img").toString(), infos, fabricList, fanxiu.get("reason").toString());
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("data", "提交成功");
            } else if (result == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("data", "token失效");
            } else if (result == -2) {
                jsonObject.put("code", -2);
                jsonObject.put("data", "该产品正在售后中，请勿重复提交");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("data", "添加失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("data", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 团订前端选择重做
     *
     * @param map
     * @return
     */
    @PostMapping("/saveRedo")
    public JSONObject saveRedo(@RequestBody Map map) {
        JSONObject jsonObject = new JSONObject();
        Object fanxiu1 = map.get("fanxiu"); // 获取尺寸列表
        List<MlccCategoryFanxiuInfo> infos = JSON.parseArray(JSON.toJSONString(fanxiu1), MlccCategoryFanxiuInfo.class);
        // 获取面料列表
        Object fabric = map.get("fabric");
        List<MlccFabricInfo> fabricList = JSON.parseArray(JSON.toJSONString(fabric), MlccFabricInfo.class);
        try {
            int result = service.saveRedo(map.get("token").toString(), map.get("code").toString(), map.get("afterCode").toString(), map.get("img").toString(), infos, fabricList, map.get("reason").toString());
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("data", "提交成功");
            } else if (result == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("data", "token失效");
            } else if (result == -2) {
                jsonObject.put("code", -2);
                jsonObject.put("data", "该产品正在售后中，请勿重复提交");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("data", "添加失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("data", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 团订获取本次售后的人员列表
     *
     * @param token     令牌
     * @param afterCode 售后订单编号
     * @return 人员列表
     */
    @RequestMapping("/listAfterEmp")
    public JSONObject listAfterEmp(String token, String afterCode) {
        JSONObject result = new JSONObject();
        try {
            List<MlccCustomerInfo> infos = service.listAfterEmp(token, afterCode);
            result.put("code", 0);
            result.put("data", infos);
        } catch (Exception e) {
            e.printStackTrace();
            result.put("code", 1);
            result.put("msg", "查询失败");
        }
        return result;
    }

    /**
     * 获取小产品面料列表
     *
     * @param token   令牌
     * @param code    小产品编号
     * @param orderSn 订单编号
     * @param mishu   前端输入的米数
     */
    @RequestMapping("/getFabricList")
    public JSONObject getFabricList(String token, String code, String orderSn, Double mishu) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccFabricInfo> list = service.getFabricList(token, code, orderSn, mishu);
            jsonObject.put("code", 0);
            jsonObject.put("data", list);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("mag", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订售后，计算本次售后的价格
     *
     * @param token     令牌
     * @param afterCode 售后订单编号
     */
    @RequestMapping("/checkAfterPrice")
    public JSONObject checkAfterPrice(String token, String afterCode) {
        JSONObject jsonObject = new JSONObject();
        try {
            double price = service.checkAfterPrice(token, afterCode);
            jsonObject.put("code", 0);
            jsonObject.put("price", price);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生错误");
        }
        return jsonObject;
    }

    /**
     * 新建售后订单
     *
     * @param orderSn 订单号
     * @param token   令牌
     * @return 返回售后订单编号
     */
    @RequestMapping("/createAfterOrder")
    public JSONObject createAfterOrder(String orderSn, String token) {
        JSONObject jsonObject = new JSONObject();
        try {
            String afterOrder = service.createAfterOrder(orderSn, token);
            if (afterOrder != null) {
                jsonObject.put("code", 0);
                jsonObject.put("data", afterOrder);
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "创建售后记录失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 团订我的订单——统计本次售后的金额
     *
     * @param token
     * @param afterOrder
     * @return
     */
    @RequestMapping("/getAfterPrice")
    public JSONObject getAfterPrice(String token, String afterOrder, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            double price = service.getAfterPrice(token, afterOrder, orderSn);
            if (price == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("data", price);
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 更新团订订单 团订售后支付
     *
     * @param token     令牌
     * @param orderSn   订单编号
     * @param afterCode 售后订单编号
     * @param money     本次售后价格
     * @param reason    售后原因
     */
    @RequestMapping("/updateTeamOrder")
    public JSONObject updateTeamOrder(String token, String orderSn, String afterCode, String money, String reason) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.updateTeamOrder(token, orderSn, afterCode, money, reason);
            if (result == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "提交成功");
            } else if (result == -2) {
                jsonObject.put("code", -2);
                jsonObject.put("msg", "余额不足");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "提交失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 团订获取人员尺寸
     *
     * @param proID
     * @param orderSn
     * @return
     */
    @RequestMapping("/listSmallSize")
    public JSONObject listSmallSize(String proID, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccXiaoProductBodysize> size = service.listSmallSize(proID, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", size);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订个人尺寸详情，获取类别
     *
     * @param proID 小产品ID
     * @return
     */
    @RequestMapping("/getProName")
    public JSONObject getProName(String proID) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccProductInfo proName = service.getProName(proID);
            jsonObject.put("code", 0);
            jsonObject.put("data", proName);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 查询团订订单批次
     *
     * @param token   令牌
     * @param orderSn 团订订单编号
     * @return 批次列表
     */
    @RequestMapping("/listTrackingteam")
    public JSONObject listTrackingteam(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccTrackingTeamDepart> list = service.listTrackingteam(token, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", list);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订未发货人员名单
     *
     * @param token   令牌
     * @param orderSn 订单编号
     * @return 小产品列表
     */
    @RequestMapping("/listNotshipments")
    public JSONObject listNotshipments(String token, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MyNotshipmentsEmp> list = service.listNotshipments(token, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", list);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订查看已发货人员列表
     *
     * @param token 令牌
     * @param boxID 装箱单ID
     * @return
     */
    @RequestMapping("/getoutPerson")
    public JSONObject getoutPerson(String token, String boxID) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MyNotshipmentsEmp> list = service.getoutPerson(token, boxID);
            jsonObject.put("code", 0);
            jsonObject.put("data", list);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 获取10个面料数据
     *
     * @param token 令牌
     * @return 面料列表
     */
    @RequestMapping("/listTenFabric")
    public JSONObject listTenFabric(String token, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccFabricInfo> fabricInfos = service.listTenFabric(token, code);
            jsonObject.put("code", 0);
            jsonObject.put("data", fabricInfos);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订产品添加到部门
     *
     * @param entity 前端提交的产品数据
     */
    @RequestMapping("/addProductDepart")
    public JSONObject addProductDepart(PengProductEntity entity) {
        JSONObject jsonObject = new JSONObject();
        try {
            int retult = service.addProductDepart(entity);
            if (retult == -1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "token失效");
            } else if (retult == -2) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "产品已存在");
            } else if (retult > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "添加成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "添加失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "添加失败");
        }
        return jsonObject;
    }

    /**
     * 获取产品基本信息
     *
     * @param proID
     * @return
     */
    @RequestMapping("/getBaseProductDetail")
    public JSONObject getBaseProductDetail(String proID) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccProductInfo detail = service.getBaseProductDetail(proID);
            jsonObject.put("code", 0);
            jsonObject.put("data", detail);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 根据团订订单中的客户ID获取部门信息
     *
     * @param token 令牌
     * @param cuID  团订订单中的客户ID
     */
    @RequestMapping("/getDepartByCuID")
    public JSONObject getDepartByCuID(String token, String cuID) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccCustomerInfo info = service.getDepartByCuID(token, cuID);
            jsonObject.put("code", 0);
            jsonObject.put("data", info);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订模板详情
     *
     * @param moduleSn 模板编号
     * @param token    令牌
     */
    @RequestMapping("/getTeamModuleDetail")
    public JSONObject getTeamModuleDetail(String moduleSn, String token) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccTeamModuleInfo detail = service.getTeamModuleDetail(moduleSn, token);
            jsonObject.put("code", 0);
            jsonObject.put("data", detail);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 产品基本信息（为了获取类别ID）
     *
     * @param id 产品ID
     */
    @RequestMapping("/proDetail")
    public JSONObject proDetail(String id) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccProductInfo detail = service.proDetail(id);
            jsonObject.put("code", 0);
            jsonObject.put("data", detail);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 计算团订价格（团订产品价格，产品价格区间）(加工费用列表)
     *
     * @param orderSn 订单编号
     */
    @RequestMapping("/teamOrderPrice")
    public JSONObject teamOrderPrice(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = service.teamOrderPrice(orderSn);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订查询成本价（加价服务）
     *
     * @param orderSn 团订订单编号
     */
    @RequestMapping("/teamOrderChengben")
    public JSONObject teamOrderChengben(String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = service.teamOrderChengben(orderSn);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }

    /**
     * 团订更新订单金额
     *
     * @param token        令牌
     * @param orderSn      订单编号
     * @param remark       备注
     * @param shiyang      式样
     * @param modifiedYang 该款打样
     * @param emergency    紧急指数
     * @param orderMoney   订单金额
     * @param brandLabel   品牌标
     */
    @RequestMapping("/updateTeamOrder2")
    public JSONObject updateTeamOrder2(String token, String orderSn, String remark, String shiyang, String modifiedYang, String emergency, String orderMoney, String brandLabel) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.updateTeamOrder(token, orderSn, remark, shiyang, modifiedYang, emergency, orderMoney, brandLabel);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "提交成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "提交失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 给产品添加附加条件（个订、团订都可以使用）
     *
     * @param productID 产品ID
     * @param type      附加条件的类型：1式样，2改款打样，3紧急指数
     * @param fujiaName 附加条件的名称
     * @param price     附加条件的价格
     */
    @RequestMapping("/changeProFujia")
    public JSONObject changeProFujia(String productID, Integer type, String fujiaName, Double price) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.changeProFujia(productID, type, fujiaName, price);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "操作成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "操作失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 修改团订的面料购买米数
     *
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @param fabricid  面料id
     * @param mishu     购买米数
     */
    @RequestMapping("/changgefabricMishu")
    public JSONObject changgefabricMishu(String orderSn, Integer orderType, String fabricid, String mishu) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.changgefabricMishu(orderSn, orderType, fabricid, mishu);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "操作成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "操作失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 修改团订的面料购买米数 （客供面料专用）
     *
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @param fabricid  面料id
     * @param mishu     购买米数
     * @param proid     产品id
     * @param remark    备注
     */
    @RequestMapping("/changgefabricMishuke")
    public JSONObject changgefabricMishuke(String orderSn, Integer orderType, String fabricid, String mishu, String proid, String remark) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.changgefabricMishuke(orderSn, orderType, fabricid, mishu, proid, remark);
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "操作成功");
            } else {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "操作失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "发生异常");
        }
        return jsonObject;
    }

    /**
     * 获取个团定单的收费服务项（里布、低领尼、纽扣）
     *
     * @param orderSn 团订订单编号
     */
    @RequestMapping("/shouFeifuwuXiang")
    public JSONObject shouFeifuwuXiang(String orderSn) {
        JSONObject jsonObject = null;
        try {
            jsonObject = service.shouFeifuwuXiang(orderSn);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 员工详情
     *
     * @param smallProid 小产品id
     */
    @RequestMapping("/deppDetail")
    public JSONObject deppDetail(String smallProid) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccCustomerInfo customerInfo = service.deppDetail(smallProid);
            jsonObject.put("code", 0);
            jsonObject.put("data", customerInfo);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 根据部门id（采购项）导出人员列表excel
     *
     * @param departId 部门id
     */
    @RequestMapping("/departProExcel")
    public ModelAndView departProExcel(String departId) {
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());

        //导出文件名称
        mv.addObject(NormalExcelConstants.FILE_NAME, "人员信息");
        //注解对象Class
        mv.addObject(NormalExcelConstants.CLASS, MlccCustomerInfo.class);

        List<MlccCustomerInfo> listMap = service.departProExcel(departId);
        //自定义表格参数
        ExportParams tit = new ExportParams();
        tit.setSheetName("量体信息");

        mv.addObject(NormalExcelConstants.PARAMS, tit);
        //导出数据列表
        mv.addObject(NormalExcelConstants.DATA_LIST, listMap);
        return mv;
    }


    /**
     * 根据部门id（采购项）导出人员列表excel
     *
     * @param departId 部门id
     */
    /*@RequestMapping("/departProExcel2")
    public void teamExport2(String departId, HttpServletRequest request, HttpServletResponse httpServletResponse) throws UnsupportedEncodingException {
        String fileName = URLEncoder.encode("客商信息表", "UTF-8");
        Map<String, List<MlccCustomerInfo>> listMap = service.departProExcel2(departId);
        try {
            httpServletResponse.setContentType("application/vnd.ms-excel");
            httpServletResponse.setCharacterEncoding("utf-8");
            httpServletResponse.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            ExcelWriter excelWriter = EasyExcel.write(httpServletResponse.getOutputStream()).build();
            ArrayList<String> keys = new ArrayList<>(listMap.keySet());
            for (int i = 0; i < keys.size(); i++) {
                WriteSheet writeSheet1 = EasyExcel.writerSheet(i, keys.get(i)).head(MlccCustomerInfo.class).build();
                excelWriter.write(listMap.get(keys.get(i)), writeSheet1);
            }
            excelWriter.finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }*/

    /**
     * 导出人员列表3
     *
     * @param departId 部门id
     * @param response 响应对象
     */
    @RequestMapping("/departProExcel3")
    public void departProExcel3(String departId, HttpServletResponse response) throws Exception {
        String filename = "人员列表.xls";
        // 下面几行是为了解决文件名乱码的问题
        response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
        service.departProExcel2(departId, response);
    }

    /**
     * 团订申请售后，根据员工工号获取名下小产品列表
     *
     * @param code    员工工号
     * @param orderSn 团订订单编号
     */
    @RequestMapping("/getSmallProductListByEmpCode")
    public JSONObject getSmallProductListByEmpCode(String code, String orderSn) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccProductInfo> result = service.getSmallProductListByEmpCode(code, orderSn);
            jsonObject.put("code", 0);
            jsonObject.put("data", result);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "查询失败");
        }
        return jsonObject;
    }
}
